/**
 * @author coderFu
 * @create 2022/3/12
 * hashCode 和 equals
 */
public class CoderHashCodeAndEquals {

    public static void main(String[] args) {


        //  hashCode方法 根据对象的地址获取对象的hash码
        CoderHashCodeAndEquals chc = new CoderHashCodeAndEquals();
        System.out.println(chc.hashCode());

        // equals 如果没有重写则比较 两个对象的地址 底层就是 ==

        CoderHashCodeAndEquals chc2 = new CoderHashCodeAndEquals();

        System.out.println(chc.equals(chc2));

        // 不会创建类对应的散列表的情况下  两个方法之前没有必然的联系

        // equals 可以重写，在配合其它方法使用的时候
        // 可以自定义比较的逻辑，比较引用里面的对象具体的值是否相同


        // 会创建散列表的对象， 一定要重写Equals一定要重写HashCode
        // 如果两个对象相同，那么他们的HashCode一定是相同的
        // 如果两个对象的HashCode相同，他们的equals不一定相同，因为在散列表中
        // HashCode 相同，即两个键对应的hash值相同，然而hash值相同，并不一定
        //能够得到相同的键值对，此时就是所谓的hash冲突

        // 我们存储到 散列表中的数据是String类型或者int类型，引用类型，
        // 当比较完他们的hashCode值之后，还会比较他们的对应的元素值，
        // 判断所对应的元素值是否相同！ 通过重写HashCode和equals方法做到
        // 为不相等的对象产生不相同的 散列码，同样的 相同的对象产生相同的散列码


    }
}
